#include "tim7.h"

/************************************************************************
*函数名：TIM7_Init
*函数功能：TIM7初始化配置函数
*函数参数：无
*函数返回值：无
*函数说明：1ms进一次中断
*************************************************************************/
void TIM7_Init(void)
{
	/*使能TIM7时钟*/
	RCC->APB1ENR |= (1<<5);

	/*配置TIM7时基单元*/
	TIM7->CNT = 0;//计数器清零
	TIM7->PSC = 8400-1;//分频8400
	TIM7->ARR = 10-1;//重装载值10（1ms更新一次）

	/*配置TIM7寄存器*/
	TIM7->CR1 |= (1<<7);//ARR寄存器进行缓冲
	TIM7->CR1 &= ~(1<<3);//计数器更新后不会停止，而是重新开始计数
	TIM7->CR1 &= ~(1<<2);
	TIM7->CR1 &= ~(1<<1);//使能更新事件

	/*软件更新（可选）*/
	TIM7->EGR = 1;//UG位置1，手动更新
	TIM7->SR &= ~(1<<0);//清零中断标志位

	/*使能计数器*/
	TIM7->CR1 |= (1<<0);

	/*开启TIM7中断*/
	//在DIER开启更新中断
	TIM7->DIER |= (1<<0);
	//设置中断优先级
	NVIC_SetPriority(TIM7_IRQn,NVIC_EncodePriority(7-2,2,3));//给TIM7设置优先级为(2,3)
	//使能中断源
	NVIC_EnableIRQ(TIM7_IRQn);
}

/************************************************************************
*函数名：TIM7_IRQHandler
*函数功能：TIM7中断服务函数
*函数参数：无
*函数返回值：无
*函数说明：
*************************************************************************/
void TIM7_IRQHandler(void)
{
	static u32 t7_time = 0;
	if (TIM7->SR & (1<<0))//如果是更新中断
	{
		TIM7->SR &= ~(1<<0);//清零中断标志位
		t7_time++;
		if (t7_time%1000 == 0)//每经过1s
		{
			printf("t7_time = %d\n",t7_time);
		}
	}
}
